package Controlador;

import Modelo.Alumno;
import Modelo.Listas;
import Modelo.Validaciones;
import Vista.JFrameAlumnos;
import Vista.Mensajes;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.text.SimpleDateFormat;
import java.util.Date;

public class ControladorAlumnos implements ActionListener,KeyListener
{
    JFrameAlumnos formAlumnos;
    Listas LisAlu;
    
    public ControladorAlumnos(Listas Lis) 
    {
      LisAlu=Lis;  
      formAlumnos=new JFrameAlumnos();  
      formAlumnos.agregarListener(this);
      formAlumnos.setVisible(true);
      
       //-------------------
        formAlumnos.getjTextFieldCedula().addKeyListener(new KeyAdapter()
                     {        
                        public void keyTyped (KeyEvent e)
                          {     
                            CedulaKeyTyped(e);  
                          }
                         
                       public void keyPressed(KeyEvent e) 
                       {
                         CedulaKeyPressed(e);  
                       }      
                         
                     });
         
         //-------------------
        formAlumnos.getjTextFieldNombre().addKeyListener(new KeyAdapter()
                     {        
                        public void keyTyped (KeyEvent e)
                          {     
                            NombreKeyTyped(e);  
                          }
                                                  
                     });
        
        //---------------------
        formAlumnos.getjTextFieldNroHijos().addKeyListener(new KeyAdapter()
           {        
                public void keyTyped (KeyEvent e)
                  {     
                     NroHijosKeyTyped(e);  
                  }
                                                  
           });
       //-------------------------------- 
        formAlumnos.getjTextFieldSueldo().addKeyListener(new KeyAdapter()
           {        
                public void keyTyped (KeyEvent e)
                  {     
                     SueldoKeyTyped(e);  
                  }
                                                  
           });
        
    }
       

//Rutinas Programador    
private void CedulaKeyTyped(java.awt.event.KeyEvent evt)
 {
      String Cadena;
      char Caracter;
      
      Cadena=formAlumnos.getjTextFieldCedula().getText();
      if (Cadena.length()==10)
        evt.consume();  
      else
        {
          Caracter=evt.getKeyChar();
          if (Caracter <'0' || Caracter > '9')
            evt.consume();  
        }     
 }         
  //-------------------------------------------
private void CedulaKeyPressed(java.awt.event.KeyEvent evt)
{
      char Caracter;
      String Cadena;
      Alumno alum;
      int Posi=-1;
      int PosiCombo;
      
      Cadena=formAlumnos.getjTextFieldCedula().getText();
      
      Caracter=evt.getKeyChar();
      if ((Caracter==10) && formAlumnos.getjTextFieldCedula().getText().length() > 0)
       {
         Posi=LisAlu.ExisteAlumno(Cadena);  
         if (Posi==-1)
         {
           if (Mensajes.DialogConfirm("Alumno no Existe, vas a incluirlo", "Seleccone")==0)
             Enabled(true);   
           else               
               Limpiar();                            
          }  
         else
           {  
             alum=LisAlu.getListaAlumnos().get(Posi);
             formAlumnos.getjTextFieldNombre().setText(alum.getNombre());
             
             PosiCombo=Validaciones.PosicionarCombo(formAlumnos.getjComboBoxSexo(), alum.getSexo()+"");
             formAlumnos.getjComboBoxSexo().setSelectedIndex(PosiCombo);           
             
              Date Fecha;
              Fecha=alum.getFechaNac();    
          
              SimpleDateFormat formateador = new SimpleDateFormat("dd/MM/yyyy");
              String FechaSt= formateador.format(Fecha);
                    
              formAlumnos.getjFormattedTextFieldFechaNac().setText(FechaSt);  
              
              formAlumnos.getjTextFieldNroHijos().setText(alum.getNroHijos().toString());
                      
              formAlumnos.getjTextFieldSueldo().setText(alum.getSueldo().toString());                           
                       
              formAlumnos.getjCheckBoxGraduado().setSelected(alum.getGraduado());  
               
               int Opcion=Mensajes.Opciones("Modificar", "Eliminar", "Salir");
             
             switch (Opcion)  
             {
                 case 0:
                        Enabled(true);
                        break;
                     
                 case 1:LisAlu.getListaAlumnos().remove(Posi);     
                        break;
             }   
           }
         
       }    
}        
  //-------------------------------------------    
private void SueldoKeyTyped(java.awt.event.KeyEvent evt)
{
      String Cadena;
      char Caracter;
      
      Cadena=formAlumnos.getjTextFieldSueldo().getText();
      if (Cadena.length()==10)
        evt.consume();  
      else
        {
          Caracter=evt.getKeyChar();
          
          if (Caracter=='.')
            return;  
          
          if (Caracter <'0' || Caracter > '9')
            evt.consume();  
        }     
}      
//----------------------------
private void NroHijosKeyTyped(java.awt.event.KeyEvent evt)
{
      String Cadena;
      char Caracter;
      
      Cadena=formAlumnos.getjTextFieldNroHijos().getText();
      if (Cadena.length()==2)
        evt.consume();  
      else
        {
          Caracter=evt.getKeyChar();
          if (Caracter <'0' || Caracter > '9')
            evt.consume();  
        }    
}        
//-----------------------------
private void Enabled(boolean Estado)
  {
     formAlumnos.getjTextFieldCedula().setEnabled(!Estado);
      
     formAlumnos.getjTextFieldNombre().setEnabled(Estado);
     formAlumnos.getjFormattedTextFieldFechaNac().setEnabled(Estado);
     formAlumnos.getjComboBoxSexo().setEnabled(Estado);
     formAlumnos.getjTextFieldNroHijos().setEnabled(Estado);
     formAlumnos.getjTextFieldSueldo().setEnabled(Estado);
     formAlumnos.getjCheckBoxGraduado().setEnabled(Estado);        
 }            
 //----------------------------
private void NombreKeyTyped(java.awt.event.KeyEvent evt)    
{
      String Cadena;
      String CarString;
      char Caracter;
      
      Cadena=formAlumnos.getjTextFieldNombre().getText();
      if (Cadena.length()==20)
        evt.consume();  
      else
        {
          Caracter=evt.getKeyChar();

          CarString=Caracter+"";
          CarString=CarString.toUpperCase();
          Caracter=CarString.charAt(0);
          
          if (Caracter==' ')
            return;
                   
          if (Caracter <'A' || Caracter > 'Z')
            evt.consume();  
        }    
   
}   
//-------------------------------
private void Grabar()
{
     String Cadena;
     double Sueldo;
     Alumno alum;
     Date Fecha;
     char Sexo;
     Integer NroHijos;
     
     Cadena=formAlumnos.getjTextFieldCedula().getText();
     if (Cadena.length()==0)
     {  
       Mensajes.Aviso("Cedula Vacia", "");  
       formAlumnos.getjTextFieldCedula().requestFocusInWindow();
       return;
     }  
     
     Cadena=formAlumnos.getjTextFieldNombre().getText();
     if (Cadena.length()==0)
       {  
         Mensajes.Aviso("Nombre Vacio", "");  
         formAlumnos.getjTextFieldNombre().requestFocusInWindow();
         return;
       }

      Cadena=formAlumnos.getjFormattedTextFieldFechaNac().getText();
      if (!Validaciones.isDate(Cadena))
       {  
         Mensajes.Aviso("Error en la Fecha ", "");  
         formAlumnos.getjFormattedTextFieldFechaNac().requestFocusInWindow();
         return;
       }
          
     Cadena=formAlumnos.getjTextFieldNroHijos().getText();
     if (Cadena.length()==0)
       {  
         Mensajes.Aviso("Nro hijos Vacio", "");  
         formAlumnos.getjTextFieldNroHijos().requestFocusInWindow();
         return;
       }

     Cadena=formAlumnos.getjTextFieldSueldo().getText();
     if (Cadena.length()==0)
       {  
         Mensajes.Aviso("Sueldo Vacio", "");  
         formAlumnos.getjTextFieldSueldo().requestFocusInWindow();
         return;
       }

    try
       {
        Sueldo = Double.parseDouble(Cadena);

       } catch(NumberFormatException fe) 
           {
             Mensajes.Aviso("Error en sueldo", "");
             return;
           } 
    
     
    Fecha=Validaciones.CnvStringFecha(formAlumnos.getjFormattedTextFieldFechaNac().getText());
    Cadena=formAlumnos.getjTextFieldNroHijos().getText();
    NroHijos=Integer.parseInt(Cadena);
    
     Cadena=(String) formAlumnos.getjComboBoxSexo().getSelectedItem();
     
     Sexo=Cadena.charAt(0);
     
     alum=new Alumno();
     alum.Alumno(formAlumnos.getjTextFieldCedula().getText(), 
                formAlumnos.getjTextFieldNombre().getText(), 
                Sexo, 
                Fecha, 
                NroHijos, 
                Sueldo, 
                formAlumnos.getjCheckBoxGraduado().isSelected());
    
    
    Cadena=formAlumnos.getjTextFieldCedula().getText();
    int Posi=LisAlu.ExisteAlumno(Cadena);
            
    if (Posi==-1) 
      LisAlu.getListaAlumnos().add(alum);
    else
      LisAlu.getListaAlumnos().set(Posi, alum);  
    
     Mensajes.Aviso("Grabacion realizada", "");
     //Limpiar
     Limpiar();    
}        
//----------------------------
private void Limpiar()
{
     formAlumnos.getjTextFieldCedula().setText("");
     formAlumnos.getjTextFieldNombre().setText("");
     formAlumnos.getjFormattedTextFieldFechaNac().setText("");
     formAlumnos.getjTextFieldNroHijos().setText("");
     formAlumnos.getjTextFieldSueldo().setText("");
     formAlumnos.getjCheckBoxGraduado().setSelected(false);
     formAlumnos.getjTextFieldCedula().requestFocusInWindow();    
}
//---------------------------

//-Fin Rutinas del Progranmado

    @Override
    public void actionPerformed(ActionEvent e) 
    {
        if(e.getSource().equals(formAlumnos.getjButtonGrabar()))
        {
            Grabar();
            return;
        }
      
      if(e.getSource().equals(formAlumnos.getjButtonCancelar()))
        {
            Limpiar();
            return;
        } 
      
       if(e.getSource().equals(formAlumnos.getjButtonConsultar()))
        {
            new ControladorConsulAlumnos(LisAlu);
            return;
        }
      
      if(e.getSource().equals(formAlumnos.getjButtonSalir()))
        {
            formAlumnos.dispose(); 
            return;
        }
    }

    @Override
    public void keyTyped(KeyEvent e) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public void keyPressed(KeyEvent e) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public void keyReleased(KeyEvent e) {
        throw new UnsupportedOperationException("Not supported yet.");
    }
}
